Learn R Programming

PwePred (version 1.0.0)

piecewise exponential: The Piecewise Exponential Distribution

Description

Density, distribution function, quantile function and random generation for the piecewise exponential distribution with piecewise rate rate.

Usage

dpwexpm(x, rate = 1, breakpoint = NULL, log = FALSE, one_piece, safety_check = TRUE)
ppwexpm(q, rate = 1, breakpoint = NULL, lower.tail = TRUE, log.p = FALSE,
       one_piece, safety_check = TRUE)
qpwexpm(p, rate = 1, breakpoint = NULL, lower.tail = TRUE, log.p = FALSE,
       one_piece, safety_check = TRUE)
rpwexpm(n, rate = 1, breakpoint = NULL)

Value

dpwexpm gives the density, ppwexpm gives the distribution function, qpwexpm gives the quantile function, and rpwexpm generates random deviates.

The length of the result is determined by x, q, p or n for dpwexpm, ppwexpm, qpwexpm or rpwexpm. You can only specify a single piecewise exponential distribution every time you call these functions. This is different from the exponential distribution functions in package stats.

Arguments rate and breakpoint must match. The length of rate is the length of breakpoint + 1.

Arguments

x, q

vector of quantiles.

p

vector of probabilities.

n

number of observations. Must be a positive integer with length 1.

rate

a vector of rates in each piece.

breakpoint

a vector of breakpoints. The length is length(rate)-1. Can be NULL if rate is a single value.

log, log.p

logical; if TRUE, probabilities p are given as log(p).

lower.tail

logical; if TRUE (default), probabilities are \(P[X \le x]\), otherwise, \(P[X > x]\).

one_piece

(only required when safety_check=FALSE) whether the distribution only has one piece (i.e., rate is a single value and breakpoint=NULL).

safety_check

logical; whether check the input arguments; if FALSE, function has better computing performance by skipping all safety checks.

Author

Tianchen Xu zjph602xutianchen@gmail.com

Details

The piecewise distribution function with piecewise rate \(\lambda_1, \dots, \lambda_r\) is $$f(t)=\lambda_{r+1} exp{[\sum_{i=1}^r(\lambda_{i+1}-\lambda_{i})d_i-\lambda_{r+1}t}$$ for \(d_{r} \le t < d_{r+1}\).

See webpage https://zjph602xtc.github.io/PWEXP/ for more details for its hazard function, cumulative hazard function, survival function, cumulative density function, quantile function.

See Also

ppwexpm_conditional, qpwexpm_conditional, rpwexpm_conditional

Examples

Run this code
# use rpwexpm function to generate piecewise exp samples with rate 2, 1, 3
r_sample <- rpwexpm(50000, rate=c(2, 1, 3), breakpoint=c(0.3, 0.8))
hist(r_sample, freq=FALSE, breaks=200, main="Density of Piecewsie Exp Dist",
    xlab='t', xlim=c(0, 1.2))

# piecewise exp density with rate 2, 1, 3
t <- seq(0, 1.5, 0.01)
f2 <- dpwexpm(t, rate=c(2, 1, 3), breakpoint=c(0.3, 0.8))
points(t, f2, col='red', pch=16)

# exp distribution can be a special case of piecewise exp distribution
f1 <- dpwexpm(t, rate=2)
lines(t, f1, lwd=2)
legend('topright', c('exp dist with rate 2','piecewise exp dist with rate 2, 1,
    3','histogram of piecewise exp dist with rate 2, 1, 3'),
    col=c('black','red'), fill=c(NA, NA, 'grey'), border=c('white', 'white',
    'black'), lty=c(1, NA, NA), pch=c(NA, 16, NA), lwd=2)

# CDF of piecewise exp with rate 2, 1, 3
F2 <- ppwexpm(t, rate=c(2, 1, 3), breakpoint=c(0.3, 0.8), lower.tail=TRUE)
plot(t, F2, type='l', col='red', lwd=2, main="CDF and Quantile Function of
    Piecewsie Exp Dist", xlim=c(0, 1.5), ylim=c(0, 1.5))

# CDF of exp dist is compatible with our package
F1 <- ppwexpm(t, rate=2, lower.tail=TRUE)
lines(t, F1, lwd=2)

# plot quantile functions of both distributions
lines(F1, qpwexpm(F1, rate=2, lower.tail=TRUE), lty=2, lwd=2)
lines(F2, qpwexpm(F2, rate=c(2, 1, 3), breakpoint=c(0.3,0.8), lower.tail=TRUE),
    col='red', lty=2, lwd=2)

abline(0, 1, col='grey')
legend('topleft', c('CDF of piecewise exp with rate 2, 1, 3', 'quantile
    function of piecewise exp with rate 2, 1, 3', 'CDF of exp with rate 2',
    'quantile function of exp with rate 2'), col=c('red', 'red', 'black',
    'black'), lty=c(1, 2, 1, 2), lwd=2)

Run the code above in your browser using DataLab